@ Title: aceptar el teclado             		        Filename:num_in.s
 @ Author: Flores Pacheco Emanuel           		    Date: 16-Marzo-2017
@ Description: aceptar el teclado
@num_in.s
@aceptar numeros del teclado 

@registros
@r1 - apuntador al buffer
@r2 - temporal de los digitos
@r3 - contador de los digitos
@r4 - multiplicador
@r5 - contador
@r0 - regreso de valor

.section .bss
.comm buffer,48 @reservando el buffer con 48 bytes

.section .data
msg:
    .ascii "Ingrese un Numero: "
  msgLen = .-msg
 
 .section .text
 .globl _start
 _start:
 
 mov r0, $1
 ldr r1,=msg
 ldr r2,msgLen
 mov r7, $4
 svc $0
                      @Entrada de los datos 
 mov r7,$3            @3 es funcion de "leer" de syscall
 mov r0,$1
 ldr r1,=buffer
 mov r2, $0x30
 svc $0
 
 ldrb r2, [r1]
 mov r3, $0
 
 pushDigits:
 stmfd sp!,{r2}   @guardar digito en la pila
 add r3,r3,$1     @incremetar contador de digitos
 ldrb r2,[r1,#1]! @sigiente digito
 cmp r2, $0xA     @checar si es enter
 beq convDigits   @salto a subproceso de convestion
 bne pushDigits   @o continuar Agregando digitos
 
 convDigits:
 mov r4, $1       @inicializar multiplicador
 mov r0,$0        @ inicializar numero
 mov r6, $0       @inicializar contador

jumpBack:
ldmfd sp!,{r2} @sacar un digito de la pila  
cmp r2, $0x30      @es digito?
blt error
cmp r2,$x39        @seguro?
blt error
sub r2,r2, $0x30   @obtener el valor numerico
mul r2,r4,r2       @ multiplicar por r4
add r0,r0,r2       @sumar a r0
add r6,r6,$1      @ incrementar contador
cmp r6,r3         @ checar si termiamos
beq exit
mov r5,r4,lsl $3
add r4,r5,r4,lsl $1
bal jumpBack

error:
mov r0, $-1
bal exit

exit:
mov r7,$1
svc $0
.end
